Date : 24 aout 1991
Protection : MOT DE PASSE ( manivelle )
Programme : GEISHA
Outils : SOFT-ICE V2.50
Fichier : FRED7.COM
Temps pass� : 2h d�j�
Soci�t� : INFERENCE M.D.O.
Divers : D�j� essay� plusieurs fois.
Origine : Mr FRERE
Num�ro : 136
Ayant r�ussi � craquer les protections sur LEGEND OF DJEL et PARIS
DAKAR 90 je me suis mis � chercher la m�me chaine dans GEISHA et
COUGAR FORCE.
On les trouve quoique un peu diff�rentes et � des endroits differents
mais le traitement est le m�me.
Dans COUGAR FORCE il suffit de continuer par F10 pour tomber dessus.
Pour GEISHA la routine a �t� plac�e dans un sous programme; apr�s avoir
choisi la couleur et tap� sur ENTER on poursuit par F10 jusqu'� un RETF,
� partir de l� on execute quelques call far avec F10 puis on tombe sur
un CALL 4D98 qui lui contient un autre call; le CALL 000A dans lequel se
trouve la routine de test en 0FFF:0046. Une chose curieuse c'est que
cette routine est dupliqu�e en m�moire trois ou quatre fois.
Je pense ajouter � mon HEXUTIL une fonction qui me chercherait
quelque chose " qui ressemble � ". Le probl�me c'est qu'au point de
vu programmation cel� a l'air d'�tre un vrai casse-t�te car comment
programmer des " � peu pr�s " ou bien " du genre de " ?
Ces deux programmes ont �t� compact� avec LZ90 de FABRICE BELLARD et
devinez quoi ? ...une fois d�compact�s ils ne fonctionnent plus; pire
que �a ils plantent tout m�me SOFT-ICE qui se trouve en mode prot�g� !
Je vais �tre oblig� d'�crire � FABRICE BELLARD pour lui demander
conseil...
Ci dessous la chaine de COUGAR FORCE:
CS=0FF7
CS:09FE C45EF8 LES BX,[BP-08]
CS:0A01 268A07 MOV AL,ES:[BX] ; MOV BYTE PTR ES:[BX],40
CS:0A04 B400 MOV AH,00 �����������������������
CS:0A06 257000 AND AX,0070
CS:0A09 B104 MOV CL,04
CS:0A0B D3F8 SAR AX,CL
CS:0A0D C45EF4 LES BX,[BP-0C]
CS:0A10 268A17 MOV DL,ES:[BX] ; MOV BYTE PTR ES:[BX],04
CS:0A13 B600 MOV DH,00 �����������������������
CS:0A15 3BC2 CMP AX,DX
CS:0A17 741C JZ 0A35 ; JMP 0A35
CS:0A19 B8FFFF MOV AX,FFFF ��������
CS:0A1C 50 PUSH AX
* Soulign�: A MODIFIER.
La chaine de GEISHA:
CS:0FFF
CS:0046 C45EFC LES BX,[BP-04]
CS:0049 268A07 MOV AL,ES:[BX]
CS:004C B400 MOV AH,00
CS:004E 257000 AND AX,0070
CS:0051 B104 MOV CL,04
CS:0053 D3F8 SAR AX,CL
CS:0055 C45EF8 LES BX,[BP-08]
CS:0058 268A17 MOV DL,ES:[BX]
CS:005B B600 MOV DH,00
CS:005D 3BC2 CMP AX,DX
CS:005F 741C JZ 0071
CS:005F B8FFFF MOV AX,FFFF
En effectuant les modifications suivantes le soft fonctionne;
CS:0046 C45EFC LES BX,[BP-04]
CS:0049 26C60740 MOV BYTE PTR ES:[BX],40 *
CS:004D C45EF8 LES BX,[BP-08] *
CS:0050 26C60704 MOV BYTE PTR ES:[BX],04 *
CS:0054 EB27 JMP 0071 *
:
:
: ; Les instructions suivantes n'ont plus d'importance.
'*' signifie � modifier.
Ne pouvant pas d�comprimer ces programmes pour l'instant, la protection
reste en place. Il y a bien la solution du " DETOURNEMENT D'INT " mais
cette derni�re est relativement compliqu�e dans ce cas l� puisqu'il
ne s'agit plus de modifier un ou deux octets mais toute une chaine.
Je vais voir ce que je peux faire....
Quelques heures plus tard... je d�cide d'essayer malgr� tout le d�tour-
nement de l'IT 21. En lan�ant le soft avec QUAID je vois que la sous-
fonction 3D de l'INT 21 est appel�e plus d'une dizaine de fois et ceci
"pr�s" de la demande du code. Plus l'INT est proche du code plus j'ai
des chances que la routine � modifier soit d�j� en place et moins
j'aurais � empiler la pile pour trouver le segment qui comporte la
routine � modifier.
J'inclus ci-dessous uniquement la partie active de fred7.com en laissant
de cot� la partie commune � l'installation du soft en r�sident;
ce dernier est le m�me pour tout les fred.com.
; PATCH POUR LE PROGRAMME GEISHA
; FREDDY_SOFT
code segment
org 100h
assume cs:code
start: jmp installe ; On va installer la routine r�sidente...
cr equ 0dh
lf equ 0ah
flag equ 3Dh ; Contenu de AH devant �tre test�.
adr_ip equ 3DC9h ; En CS:3DC9 il faut avoir 268A
instok db cr,lf,' D�tournement de l',39,'INT 21 sous-fonction 3D'
db cr,lf
db ' ....FREDDY_SOFT....','$'
drap db 0,0
elimine db cr,lf,'J',39,'ai en principe tout remis en l',39,'�tat....'
db cr,lf,'$'
chaine dw 7c6h,0c440h,0f85eh,0c626h,407h,27ebh
int21 label dword ; sauvegarde des adresses SEG:OFF de l'INT21 d'origine
i40off db 0,0 ; OFFSET
i40seg db 0,0 ; SEGMENT
tsrint40 proc far
jmp short apr�s_id
db 'FR' ; On intercalle au d�but du code un identificateur
apr�s_id: pushf ; qui permettra de savoir si le programme est l� !
push ds ; Tous les registres utilis�s doivent �tre sauv�s...
push es
push di
push si
push dx
push cx
push bx
push ax
cmp byte ptr [drap],1 ; Si 1 on devient transparent.
jz suite ; Saut � l'INT 21 toutes fonctions valid�es.
cmp ah,flag ; AH = 3D.
jnz suite ; Si non on traite les INT 21 normalement.
mov dx,sp ; On sauve SP dans un registre, ici AX.
mov cx,20 ; On essaie une vingtaine de fois...
incr: pop ds ; Pour trouver le bon segment CS...
dec cx
jz s ; Si au bout de vingt fois on a pas r�ussi on sort...
cmp word ptr ds:[adr_ip],8A26h
jnz incr
; Ci-dessous deux versions possibles:
;
; 1) Une not�e RO qui est efficace pour de longues chaines:
mov ax,ds ; RO On place DS en ES puisque STOSW charge en
mov es,ax ; RO ES:DI.
mov ax,cs ; RO Et CS en DS puisque les donn�es sont LODSW
mov ds,ax ; RO de DS:SI.
mov si,offset chaine ; RO pointe sur d�but de chaine.
mov di,[adr_ip+1] ; RO pointe sur d�but chaine � modifier ( CS ).
mov cx,6 ; RO six mots � transf�rer.
cld ; RO zero dans le flag direction ( incr�mente )
boucle: lodsw ; RO contenu de SI en AX.
stosw ; RO contenu de AX en [DI].
loop boucle ; RO on tourne tant que CX # 0.
; 2) Une autre qui est inactive en ce moment et qui est utilisable pour
; des longueurs inf�rieures � une dizaine de mots. ( et plus simple...)
; mov bx,[adr_ip+1]
; mov word ptr [bx],07c6h
; add bx,2;
; mov word ptr [bx],0c440h
; add bx,2
; mov word ptr [bx],0f85eh
; add bx,2
; mov word ptr [bx],0c626h
; add bx,2
; mov word ptr [bx],0407h
; add bx,2
; mov word ptr [bx],27ebh
mov byte ptr [drap],1h
s: mov sp,dx ; On remet SS:SP d'origine.
suite: pop ax ; On restaure tous les registres
pop bx
pop cx
pop dx
pop si
pop di
pop es
pop ds
popf
jmp int21 ; Appel de l'INT21 officielle. ( Retour par IRET )
tsrint40 endp
eor:
|